package br.com.sistema.models;

import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version;

@Entity
@Table(name="endereco", uniqueConstraints={@UniqueConstraint(columnNames={"entiid","endetipoid"})})
public class Endereco {

	@ManyToOne
	@JoinColumn(name="muniid", nullable=false)
	private Municipio municipio;
	
	@ManyToOne
	@JoinColumn(name="entiid", nullable=false)
	private Entidade entidade;
	
	@ManyToOne
	@JoinColumn(name="endetipoid", nullable=false)
	private EnderecoTipo tipoendereco;
	
	@Id
	@Column(name="endeid")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer endeid;
	
	@Column(name="endelogradouro", length=150, nullable=false)
	private String endelogradouro;
	
	@Column(name="endenumero", length=10, nullable=false)
	private String endenumero;
	
	@Column(name="endecomplemento")
	private String endecomplemento;
	
	@Column(name="endebairro", length=150)
	private String endebairro;
	
	@Column(name="endecep", length=20)
	private String endecep;
	
	@Column(name="endeddd", length=3)
	private String endeddd;
	
	@Column(name="endetel1", length=20)
	private String endetel1;
	
	@Column(name="endetel2", length=20)
	private String endetel2;
	
	@Column(name="endetel3", length=20)
	private String endetel3;
	
	@Column(name="xdatai", nullable=false)
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar xdatai;
	
	@Column(name="xdatau", nullable=false)
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar xdatau;
	
	@Column(name="xusuario", nullable=false)
	private String xusuario;

	@Version
	@Column(name="xversao")
	private Integer xversao;
	
	@PrePersist
	public void prePersist(){
		this.xdatai = Calendar.getInstance();
		this.xdatau = Calendar.getInstance();
	}
	
	@PreUpdate
	public void preUpdate(){
		this.xdatau = Calendar.getInstance();
	}

	@Transient
	private String entinome;
	
	@Transient
	private String endetiponome;
	
	public String getEntinome() {
		return getEntidade().getEntinome();
	}
	
	public void setEntinome(String entinome) {
		this.entinome = getEntidade().getEntinome();
	}
	
	public String getEndetiponome() {
		return getTipoendereco().getEndetiponome();
	}
	
	public void setEndetiponome(String endetiponome) {
		this.endetiponome = getTipoendereco().getEndetiponome();
	}
	
	public Municipio getMunicipio() {
		return municipio;
	}

	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	public Entidade getEntidade() {
		return entidade;
	}

	public void setEntidade(Entidade entidade) {
		this.entidade = entidade;
	}

	public Integer getEndeid() {
		return endeid;
	}

	public void setEndeid(int endeid) {
		this.endeid = endeid;
	}

	public EnderecoTipo getTipoendereco() {
		return tipoendereco;
	}

	public void setTipoendereco(EnderecoTipo tipoendereco) {
		this.tipoendereco = tipoendereco;
	}

	public String getEndelogradouro() {
		return endelogradouro;
	}

	public void setEndelogradouro(String endelogradouro) {
		this.endelogradouro = endelogradouro;
	}

	public String getEndenumero() {
		return endenumero;
	}

	public void setEndenumero(String endenumero) {
		this.endenumero = endenumero;
	}

	public String getEndecomplemento() {
		return endecomplemento;
	}

	public void setEndecomplemento(String endecomplemento) {
		this.endecomplemento = endecomplemento;
	}

	public String getEndebairro() {
		return endebairro;
	}

	public void setEndebairro(String endebairro) {
		this.endebairro = endebairro;
	}

	public String getEndecep() {
		return endecep;
	}

	public String getEndetel1() {
		return endetel1;
	}

	public void setEndetel1(String endetel1) {
		this.endetel1 = endetel1;
	}

	public String getEndetel2() {
		return endetel2;
	}

	public void setEndetel2(String endetel2) {
		this.endetel2 = endetel2;
	}

	public String getEndetel3() {
		return endetel3;
	}
	
	public String getEndeddd() {
		return endeddd;
	}

	public void setEndeddd(String endeddd) {
		this.endeddd = endeddd;
	}

	public void setEndetel3(String endetel3) {
		this.endetel3 = endetel3;
	}

	public void setEndecep(String endecep) {
		this.endecep = endecep;
	}

	public Calendar getXdatai() {
		return xdatai;
	}

	public void setXdatai(Calendar xdatai) {
		this.xdatai = xdatai;
	}

	public Calendar getXdatau() {
		return xdatau;
	}

	public void setXdatau(Calendar xdatau) {
		this.xdatau = xdatau;
	}

	public String getXusuario() {
		return xusuario;
	}

	public void setXusuario(String xusuario) {
		this.xusuario = xusuario;
	}
	
	
	
}
